// 定义一个函数可以检测两个无符号整数相加是否会溢出
// 该函数的实现使用了一个技巧：
// 1. 如果 x + y < x，说明发生了溢出
// 2. 如果 x + y >= x，说明没有发生溢出
int uadd_ok(unsigned x, unsigned y) {
    // 计算 x + y 的值
    unsigned sum = x + y;
    // 检查是否发生了溢出
    return sum >= x;
}
// 测试函数
#include <stdio.h>
int main() {
    unsigned x = 0xFFFFFFFF; // 最大的无符号整数
    unsigned y = 1; // 加1
    if (uadd_ok(x, y)) {
        printf("No overflow\n");
    } else {
        printf("Overflow\n");
    }
    return 0;
}

// Usage: gcc -o uadd_ok.out 2.27-uadd_ok.c
// Output: Overflow
// 说明：
// 1. 当 x 和 y 的和大于等于 x 时，说明没有发生溢出。
// 2. 当 x 和 y 的和小于 x 时，说明发生了溢出。